"""
ConnLLM价格计算模块
提供更精确的API成本计算功能
"""
import logging
from typing import Dict, Any, Optional, Union

# 设置日志
logger = logging.getLogger("connllm.pricing")

# 从核心模块导入默认价格信息
try:
	from ..core.pricing import DEFAULT_PRICING
except ImportError:
	logger.warning("无法导入核心价格信息，使用空字典")
	DEFAULT_PRICING = {}


def calculate_cost(provider_type: str, model: str, 
				  input_tokens: int, output_tokens: int) -> float:
	"""
	根据token使用量计算API调用成本
	
	Args:
		provider_type: 提供商类型
		model: 模型名称
		input_tokens: 输入token数量
		output_tokens: 输出token数量
		
	Returns:
		成本（美元）
	"""
	# 获取价格信息
	prices = get_model_prices(provider_type, model)
	
	# 计算成本
	input_cost = (input_tokens / 1000) * prices.get("input", 0.0)
	output_cost = (output_tokens / 1000) * prices.get("output", 0.0)
	
	return input_cost + output_cost


def get_model_prices(provider_type: str, model: str) -> Dict[str, float]:
	"""
	获取特定模型的价格信息
	
	Args:
		provider_type: 提供商类型
		model: 模型名称
		
	Returns:
		价格字典，包含input和output键
	"""
	provider_prices = DEFAULT_PRICING.get(provider_type, {})
	
	# 处理OpenRouter特殊情况
	if provider_type == "openrouter" and "/" in model:
		# OpenRouter模型格式为"provider/model"
		return provider_prices.get(model, {"input": 0.0, "output": 0.0})
		
	# 普通情况
	return provider_prices.get(model, {"input": 0.0, "output": 0.0})


def format_cost(cost: float) -> str:
	"""
	格式化成本金额，使其更易读
	
	Args:
		cost: 成本金额（美元）
		
	Returns:
		格式化后的字符串
	"""
	if cost < 0.01:
		# 小于1美分，显示为亚美分
		return f"${cost*100:.4f}¢"
	elif cost < 1.0:
		# 小于1美元，显示为美分
		return f"${cost:.4f}"
	else:
		# 大于1美元
		return f"${cost:.2f}"
